package com.dev.springBootDemo;

import java.util.function.Predicate;


public class PredicateDemo {
    public static void main(String[] args) {
        // 检查字符串是否等于"张三"
        boolean string = chenkString("张三", s -> s.equals("张三"));
        System.out.println(string);
        
        // 检查字符串长度是否大于8且小于18
        boolean hello = chenkString("hello", s -> s.length() > 8, s -> s.length() < 18);
        System.out.println(hello); // true
    }
    
    /**
     * 使用单个谓词检查字符串是否满足条件。
     *
     * @param s 要检查的字符串
     * @param pre 字符串检查谓词
     * @return 如果字符串满足谓词条件，则返回true；否则返回false。
     */
    // 判定给定的字符串是否满足要求
    // private static boolean chenkString(String s, Predicate<String> pre){
    //     return pre.test(s); // true
    // }
    
    /**
     * 使用单个谓词的否定检查字符串是否不满足条件。
     *
     * @param s 要检查的字符串
     * @param pre 字符串检查谓词
     * @return 如果字符串不满足谓词条件，则返回true；否则返回false。
     */
    private static boolean chenkString(String s, Predicate<String> pre){
        return pre.negate().test(s); // false
    }
    
    /**
     * 使用两个谓词的逻辑与检查字符串是否同时满足两个条件。
     *
     * @param s 要检查的字符串
     * @param pre 第一个字符串检查谓词
     * @param pre1 第二个字符串检查谓词
     * @return 如果字符串同时满足两个谓词条件，则返回true；否则返回false。
     */
    // private static boolean chenkString(String s, Predicate<String> pre, Predicate<String> pre1){
    //     return pre.and(pre1).test(s); // false
    // }
    
    /**
     * 使用两个谓词的逻辑或检查字符串是否满足其中一个条件。
     *
     * @param s 要检查的字符串
     * @param pre 第一个字符串检查谓词
     * @param pre1 第二个字符串检查谓词
     * @return 如果字符串满足两个谓词中的任何一个，则返回true；否则返回false。
     */
    private static boolean chenkString(String s, Predicate<String> pre, Predicate<String> pre1){
        return pre.or(pre1).test(s); // true
    }
}
